1. Technical Field
This invention relates to computer systems having a graphics interface, and more particularly to computer graphics systems, and more particularly to processing commands and data for graphics systems employing display windows with both 2D and 3D images.
2. Description of the Related Art
Computer graphics workstations are used to generate high-quality graphics images, often three-dimensional, and to run applications programs in a windowed environment. A windowed environment allows a display device to present the output from several applications on a single physical output medium, e.g., a CRT display or monitor. The output display of an application is typically presented in one or more "windows" in a windowed environment. One or more unique "contexts" may be associated with the application area of each window. The contexts define the properties and parameters of the window area for that application. Thus, context refers to the data used by a graphics system to control the rendering process, i.e., a process through which a displayable image is generated. To enhance performance, computer graphics systems are moving toward the use of multiple graphics threads, each thread potentially having its own graphics context.
Three dimensional (3D) clients are typically computationally intensive and demanding on system bus bandwidth, and the threads for 3D clients can run on multiple processors in an attempt to satisfy their requirement for host processing cycles. Whenever the graphics system switches between clients, the state information must be saved and restored at many places in the graphics pipeline.
Increasingly, computer graphics systems are supporting multiple 2D and 3D contexts. For example, a graphics system may have in one window a high quality rendering of an airplane being developed. In another window there may be an interactive dialog in which the designer can change the properties of the airplane or make inquiries about it. In yet another window there may be a clock, and in still another window an inter-office mailing application may be running. The X-Window System developed by M.I.T. is a well-known example of such a windowing system standard.
In a graphics system in which multiple 2D and 3D contexts must be supported, and quickly switched among, it is also important to maintain a high degree of user interactivity with minimum latency. All graphics pipelines experience pipeline latency, which is defined as the time required for a single primitive to traverse the pipeline. Previous graphics adapters provided only a single command store (e.g., a FIFO, see copending application Ser. No. 09/165,619) for 3D, 2D, and other host processes. This is not an efficient method to render the 2D and 3D processes as it requires the host to semaphore, and requires FIFO draining upon context switch. Also 2D and 3D processes use the FIFO differently; since 3D processes require large amounts of data to draw an object, they typically use DMA commands which cause the adapter to fetch data. On the other hand, 2D processes typically require small amounts of data, and so it is more efficient to use PIO graphics data, rather than use graphics data. But the single FIFO implementation requires that the host use a semaphore before dispatching PIO commands. The need for a host semaphore prior to dispatching PIO commands makes this a more expensive operation than a DMA. The single FIFO implementation also requires the host to explicitly manage the 3D-to-2D and 2D-to-3D context switch by effecting a context save and context restore.
The window operations which theoretically should be interactive with the user often force the user to wait while graphics primitives are being rendered. For example, the user may have to wait for a small window to pop up on the display while a high quality rendering of an airplane is being developed in another window. Since graphics pipelines and graphics systems are evolving to support more complex primitives and longer pipelines, pipeline latency now presents a prohibitive problem in the ongoing effort to increase pipeline throughput and efficiency. There is a long-felt need to reduce the need for complex host management, processor overhead, host semaphore, and FIFO draining. These needs have not been heretofore addressed satisfactorily by current implementations.